package cn.mymanagesys.service.impl;

import cn.mymanagesys.dao.SysUserDao;
import cn.mymanagesys.dao.impl.SysUserDaoImpl;
import cn.mymanagesys.entity.SysUser;
import cn.mymanagesys.service.SysUserService;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SysUserServiceImpl implements SysUserService {

    private SysUserDao sysUserDao = new SysUserDaoImpl();

    @Override
    public SysUser login(String loginName, String password) {

        SysUser sysUser = sysUserDao.selectByLoginName(loginName);

        if (sysUser==null){
            return null;
        }
        try {

            /*
            * https://www.liaoxuefeng.com/wiki/1252599548343744/1304227729113121
            * Java标准库提供了常用的哈希算法，并且有一套统一的接口。我们以MD5算法为例
            *使用MessageDigest时，我们首先根据哈希算法获取一个MessageDigest实例，
            * 然后，反复调用update(byte[])输入数据。
            * 当输入结束后，调用digest()方法获得byte[]数组表示的摘要，
            * 最后，把它转换为十六进制的字符串。
             */
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes("UTF-8"));
            md.update(sysUser.getSalt().getBytes("UTF-8"));
            byte[] result = md.digest();
            String md5Password = new BigInteger(1, result).toString(16);

            if (md5Password.equals(sysUser.getPassword())){
                return sysUser;
            }
        } catch (NoSuchAlgorithmException e){
            e.printStackTrace();
        } catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
        return null;
    }
}
